www.gusucode.com > ROCKOA PHP协同办公OA办公系统 v2.0PHP源码程序 > ROCKOA PHP协同办公OA办公系统 v2.0/rockoa_v2.0/rockoa_v2.0/webrock/flow/course/ext_coursescript.js
var setid = params.setid, table = params.table; var data,obj0,bool=true,form,grid,tree,changedata,json={},sjson={},nowid=0; var fields = rock[params.index].changedata.fields; if(!fields)fields=''; function clickadd(lx){ form.reset(); var a = ['新增一个流程','新增进程']; form.setmsg(a[lx],'blue'); form.field('namePost').focus(); form.field('atypePost').setDisabled((lx==0)?false:true); if(lx==1){ form.field('pidPost').setValue(changedata.id); } } function clickedit(){ var pid = changedata.pid; if(pid!=0){ changedata.atype=''; changedata.atypeid=''; changedata.atypename=''; } var bo = (changedata.children.length<=0)?false:true; form.field('nidPost').setDisabled(bo); if(!bo)form.field('nidPost').getStore().loadData(c.getcome()); form.adddata(changedata); form.field('idPost').setValue(changedata.id); form.setmsg('修改状态','blue'); form.field('namePost').focus(); if(pid!=0){ form.field('atypePost').setDisabled(true); }else{ form.field('atypePost').setDisabled(false); } if(changedata.checktype=='rank')form.field('rankingPost').setValue(changedata.checktypename); } function changedow(){ } function cogchangtj(){ if(fields==''){ js.msg('success', '没有设置字段'); return; } var a = changedata; wherewindows.show('进程['+a.name+']条件',table, 'flowcourse_'+a.id+'', 2, {fields:fields}); } function setcatopen(){ var a = changedata; getcmp('fosetmes_'+rand+'').setText('['+a.name+']进程下动作'); getcmp('courseactg_'+rand+'').searchgoto('[A][K]cid='+a.id+''); } var omenu=Ext.create('Ext.menu.Menu',{ items:[{ text:'新增下进程',id:'adddown_'+rand+'',handler:function(){clickadd(1)},icon:gicons('add') },'-',{ text:'删除进程',id:'cancelss_'+rand+'',handler:function(){clickdel()},icon:gicons('delete') },'-',{ text:'修改进程',handler:function(){clickedit()},icon:gicons('page_edit') },'-',{ text:'设置此进程条件',id:'setcog_'+rand+'',icon:gicons('cog'),handler:function(){cogchangtj()} },'-',{ text:'设置进程动作',id:'actcog_'+rand+'',icon:gicons('cog'),handler:function(){setcatopen()} }] }); function clickdel(){ if(bool)return; if(!confirm('确定要删除此进程吗?'))return; js.msg('wait','删除中...'); bool = true; $.post(js.getajaxurl('publicdel','index'),{table:'flow_course',id:changedata.id}, function(){ js.msg('success','删除成功'); bool=false; c.reload(nowid); }); } var panel= [{ xtype:'panel',region:'center',layout:'border',border:false, items:[{ xtype:'panel',id:'courseaefwe_'+rand+'',region:'center',tbar:[{ icon:gicons('reload'),handler:function(){grid.storereload()} },'-',{ text:'新增一个流程',icon:gicons('add'),handler:function(){clickadd(0)} }],html:'<div id="raphael_'+rand+'" style="overflow:auto"></div>' },{ region:'south',height:150,split:true,xtype:'rockgridform',id:'courseactg_'+rand+'',tablename:'flow_courseact',bbarbool:false,searchtools:false, tbar:[{ xtype:'tbtext',text:'进程下动作',id:'fosetmes_'+rand+'' }],storeautoLoad:false,defaultorder:'sort',formtitle:'进程动作',formaddbefore:function(){ if(!changedata){ js.msg('msg','没有选择进程名称'); return false; } return true; }, formadd:function(f){ f.setVal('cid', changedata.id); }, columns:[{ xtype: 'rownumberer', width: 40 },{ text:'动作名称',dataIndex:'name',width:100 },{ text:'动作值',dataIndex:'actv',width:80 },{ text:'下一进程',dataIndex:'nid',width:100,renderer:function(v){ var s = ''; if(v==0)s='正常'; if(v==-1)s='退回提交人'; return s; } },{ text:'副名称',dataIndex:'names',width:90 },{ text:'说明',dataIndex:'explain',flex:1 },{ text:'状态颜色',dataIndex:'color',width:80 },{ text:'排序号',dataIndex:'sort',width:60 }], formwidth:400, formparams:{ submitfields:'name,sort,explain,cid,nid,action,actv,names,color',labelWidth:100, params:{int_filestype:'sort,cid,nid,actv,mid',otherfields:'mid='+setid+''}, items:[{ fieldLabel:'id号',value:'0',name:'idPost',hidden:true },{ fieldLabel:'',value:'0',name:'cidPost',hidden:true },{ fieldLabel:''+bitian+'动作名称',name:'namePost',allowBlank: false },{ fieldLabel:''+bitian+'动作值',name:'actvPost',value:'1',xtype:'combo',store:js.arraystr('1,2,3,4,6,7,8,9'),editable:false },{ fieldLabel:'副名称',name:'namesPost' },{ fieldLabel:'状态颜色',name:'colorPost' },{ fieldLabel:'下一进程',name:'nidPost',value:'0',xtype:'combo',store:[['0','正常'],['-1','退回提交人']],editable:false },{ fieldLabel:'序号',name:'sortPost',value:'0',minValue:0,xtype:'numberfield' },{ fieldLabel:'说明',name:'explainPost',xtype:'textareafield',height:60 },{ fieldLabel:'动作执行方法名',name:'actionPost' }] } }] },{ width:250,maxWidth:400,minWidth:200,split:true,region:'east',title:'工作流进程',collapsible: true,xtype:'rockform',tablename:'flow_course', submitfields:'name,num,checktype,atype,atypeid,atypename,pid,nid,checktype,checktypeid,checktypename,explain,sort', params:{otherfields:'optdt={now},setid='+setid+'',int_filestype:'pid,nid,sort'},autoScroll:false, url:publicsave('course','flow'), destroypanel:[omenu], items:[{ fieldLabel:'id号',value:'0',name:'idPost',hidden:true },{ value:'0',name:'pidPost',hidden:true },{ fieldLabel:'编号',name:'numPost' },{ fieldLabel:'<font color=red>*</font>进程名称',name:'namePost',allowBlank: false,xtype:'optioncombo',optionmnum:'flowcoursename_'+setid+'' },{ fieldLabel:'指定类型',name:'atypePost',value:'all',editable:false,xtype:'combo',store:[['all','所有人员'],['dept','指定部门/人']],listeners:{change:function(o){ var o1= form.field('atypeidPost'), o2= form.field('atypenamePost'); o1.setValue(''); if(o.value=='all'||isempt(o.value)){ o2.setValue('所有人员'); o2.hide(); }else{ o2.setValue(''); o2.show(); } }} },{ name:'atypeidPost',id:'atypeid_'+rand+'',hidden:true },{ fieldLabel:''+bitian+'指定值',value:'所有人员',nameidfields:'atypeid_'+rand+'',name:'atypenamePost',xtype:'changedeptuser',changetitle:'选择部门/人员',hidden:true,changetype:'deptcheckuser',changecheck:function(o){ var atype = form.field('atypePost').getValue(); if(atype=='all')return false; return true; } },{ name:'checktypeidPost',value:'',hidden:true,id:'checktypeid_'+rand+'' },{ fieldLabel:'<font color=red>*</font>审核人类型',name:'checktypePost',editable:false,xtype:'optioncombo',optionmnum:'flowchecktype',autoloadlist:true,valuefields:'value',allowBlank: false,change:function(o){ var val = o.value; form.field('rankingPost').setVisible((val=='rank')?true:false); form.field('checktypenamePost').setVisible((val=='user')?true:false); } },{ fieldLabel:''+bitian+'选择职位',name:'rankingPost',xtype:'optioncombo',optionmnum:'ranking',autoloadlist:true,hidden:true },{ fieldLabel:''+bitian+'审核人',nameidfields:'checktypeid_'+rand+'',hidden:true,name:'checktypenamePost',xtype:'changedeptuser',changetitle:'选择审核人',changetype:'usercheck' },{ fieldLabel:'下一进程',name:'nidPost',value:'0',editable:false,xtype:'combo',store:[['0','结束流程']] },{ fieldLabel:'说明',name:'explainPost',xtype:'textareafield',height:80 },{ fieldLabel:'排序号',name:'sortPost',xtype:'numberfield',value:0,minValue:0 }], success:function(bac, o){ var pid = o.field('pidPost').getValue(); if(pid=='0')nowid = bac.id; if(nowid !=0){ c.reload(nowid); } if(pid=='0')grid.storereload(); }, submitcheck:function(o){ if(bool)return '请稍后'; var type = o.field('atypePost').getValue(), ctype= o.field('checktypePost').getValue(), ctynae= o.field('checktypenamePost'), ctynai= o.field('checktypeidPost'); if(type!='all' && o.field('pidPost').getValue()=='0' ){ if(isempt(o.field('atypeidPost').getValue()))return '请选择指定部门/人'; } if(ctype=='rank'){ var rank = o.field('rankingPost').getValue(); if(isempt(rank)){ return '请选择职位'; }else{ ctynae.setValue(rank); ctynai.setValue(''); } }else if(ctype=='user'){ var ranks = ctynae.getValue(); if(isempt(ranks))return '请选择审核人'; }else{ ctynae.setValue(''); ctynai.setValue(''); } return ''; } },{ width:250,split:true,region:'west',xtype:'panel',layout:'border',border:false,items:[{ tablename:'flow_course',keywhere:'and setid='+setid+' and pid=0',bbarbool:false,id:'paenlgrid_'+rand+'', title:'已有流程',xtype:'rockgrid',region:'center',columns:[{ xtype: 'rownumberer',width: 40 },{ text:'针对类型',align:'center',dataIndex:'atypename',flex:1 },{ text:'名称',align:'center',dataIndex:'name',width:100 }], click:function(o, v){ nowid = v.raw.id; c.reload(nowid); } },{ xtype:'treepanel',id:'paenltree_'+rand+'',split:true,tablename:'flow_course',title:'进程树形结构',hideHeaders:true,height:300,collapsible: true,region:'south', rootVisible:false,columns:[{xtype: 'treecolumn',text:'名称',flex:1,align:'left',dataIndex:'name'}], store:Ext.create('Ext.data.TreeStore', { fields:['name'], expanded: true, root:{children:[]} }), listeners:{ itemclick:function(o,node){ changedata = node.raw; c.gpath(node.raw.id); }, itemmove:function(o,old,news,index){ c.changeitemmove(o.raw,old.raw, news.raw); }, beforeitemmove:function(o,old,news){ if(news.raw.id=='root')return false; } }, viewConfig: { plugins: { ptype: 'treeviewdragdrop' } }, bbar:[{ text:'保存移动',handler:function(){c.savemove()} },'-',{ text:'恢复',handler:function(){c.treehuifu()} },{ xtype:'tbtext',id:'magsa_'+rand+'' }] }] }]; function loadraphael(){ if(get('raphaelmin')){ bool = false; }else{ var scr = document.createElement('script'); scr.src = 'js/raphael-min-2.1.2.js'; scr.id = 'raphaelmin'; scr.onload = function(){ bool = false; } document.body.appendChild(scr); bool = false; } } var c = { movedata:{}, jsondata:'{}', savemove:function() { if(bool)return; var da={},s,v,i=0; for(s in c.movedata){ v = c.movedata[s]; if(v>0){ da['sid'+i+'']=''+s+':'+v+''; i++; } } da.total = i; if(i==0)return; getcmp('magsa_'+rand+'').setText('保存中...'); bool = true; $.post(js.getajaxurl('savemove','course','flow'),da,function(s1){ bool = false; getcmp('magsa_'+rand+'').setText('保存成功'); c.reload(nowid); }); }, treehuifu:function() { tree.getStore().setRootNode(Ext.decode(c.jsondata)); }, changeitemmove:function(a,o,n) { var npid = n.id; var opid = a.pid; if(npid!=opid){ this.movedata[a.id]=npid; }else{ this.movedata[a.id]=-1; } }, reload:function(lid) { if(bool)return; var url = publictreestore({expandall:'true',leaf:'false',order:'sort'}); var s = '<img src="images/loading.gif" align="absmiddle"> 加载中...'; $('#raphael_'+rand+'').html(s); bool = true; $.post(url,{tablename_abc:'flow_course',keywhere:'and setid='+setid+'',fistwhere:'and id='+lid+''},function(da){ var a = js.decode(da); c.jsondata = da; c.movedata = {}; tree.getStore().setRootNode(Ext.decode(da)); data = a.children; bool = false; c.show(); }); }, rect:function(o,x,y,text,sid, styp){ var attr,w,h,attrs; attr = {stroke:'#ABD9FC','stroke-width':1,'fill':'#D8EEFF'}; attrs = {'font-size':12,fill:'#208BF7'}; if(styp=='start'||styp=='end'){ attr = {stroke:'#cccccc','stroke-width':1,'fill':'#f1f1f1'}; attrs = {'font-size':12,fill:'#888888'}; } w = 80; h = 40, x1 = (x+w*0.5); var cl = o.rect(x,y,w,h, 5).attr(attr); var c2 = o.text(x1,(y+h*0.5), text).attr(attrs); cl.click(function(e){ c.clickc(this,e, sid); }); c2.click(function(e){ c.clickc(this,e, sid); }); }, texpam:function(o,x,y,text){ if(isempt(text))return; var c2 = o.text(x,y, text).attr({'font-size':11,fill:'#555555'}); }, clickc:function(o1,e, sid){ var a,c,pid,bo; a = json[sid]; changedata = a; c = a.children; getcmp('cancelss_'+rand+'').setDisabled((c.length<=0)?false:true); pid = a.pid; bo = true; if(pid>0){ if(json[pid].children.length>1)bo=false; } getcmp('setcog_'+rand+'').setDisabled(bo); bo = false; if(a.checktype=='start' || a.checktype=='end')bo = true; getcmp('actcog_'+rand+'').setDisabled(bo); this.gpath(sid); omenu.showAt([e.clientX, e.clientY]); }, jian:function(o,x,y,x1,y1, jt){ var atr = { stroke: '#208BF7', 'stroke-width': 2 }; if(jt)atr['arrow-end'] = 'classic-wide-long'; o.path('M'+x+' '+y+'L'+x1+' '+y1+'').attr(atr); }, show:function(){ var oi=0,oarr=[],s='',w,bgcol=['#f1f1f1','#EDE3FC','#F9EFB3','#D0F9CF'],i1,o; oi= data.length; o = $('#'+obj0.id+'-body'); w = o.width(); h = o.height(); s ='<table cellspacing="0" cellpadding="0"><tr>'; w= w-20; $('#raphael_'+rand+'').html(s); $('#raphael_'+rand+'').css('height',h); var pap=Raphael('raphael_'+rand+'',w,h+100); json = {}; sjson= {}; c.addtu(data[0], pap,w,w, 0, 1,0); c.addot(pap); }, getcome:function() { var a,b,c; var a=[['0','结束进程']]; for(b in json){ c = json[b]; if(this.path.indexOf('['+c.id+']')<0){ a.push([c.id,''+c.id+'.'+c.name+'']); } } return a; }, addot:function(pap){ var a,b,d,nid,a1; var cw = 84,ch = 44; var x,y,x1,y1; for(b in sjson){ a = sjson[b]; nid= a.nid; if(nid>0){ a1 = json[nid]; if(a1){ x = a.x; y = a.y; x1 = a1.x; y1 = a1.y; if(x>x1){ x1 = x1+cw; y1 = y1 + ch*0.5; }else if(x<x1){ y1 = y1 + ch*0.5; x1 = x1 -2; }else{ x1 = x1+cw*0.5; } var jg = y1-y; if(jg > 0){ x = x+cw*0.5; y = y+ch+2; }else{ x = x -2; y = y+ch*0.5; } c.jian(pap, x, y, x1, y1, true); } } } }, //以下计算很难理解啊 addtu:function(a, pap, zw,w, oi, zc,st){ var y,len,i,x,na,ctyp,ctyps; var cw = 80,ch = 40,jth=60; y = 10 + ((ch+jth)*(a.level-1)); x = w/zc *0.5 - cw*0.5 + oi * w/zc + st; ctyp = a.checktype; ctyps= a.checktypename; if(ctyp=='end'||ctyp=='start')ctyp=''; if(!isempt(ctyp)){ ctyp = form.field('checktypePost').getItems(ctyp); if(!isempt(ctyps))ctyp=ctyps; } na= ''+a.id+'.'+a.name; if(!isempt(ctyp))na+='\n'+ctyp; c.rect(pap,x, y, na, a.id, a.checktype); a.x = x; a.y = y; json[a.id] = a; len = a.children.length; if(len>0){ var clxy = []; for(i=0;i<len;i++){ var asd=c.addtu(a.children[i], pap, zw, w/zc, i, len, st+oi * w/zc); clxy.push(asd); } i = 0; //画箭头 var ny1 = y+ch+jth*0.5; if(len==1){ c.jian(pap, x+cw*0.5, y+ch+5, clxy[i][0]+cw*0.5, clxy[i][1]-5, true); }else{ c.jian(pap,clxy[i][0]+cw*0.5, ny1, clxy[len-1][0]+cw*0.5 , ny1,false); c.jian(pap, x+cw*0.5, y+ch+5, x+cw*0.5, ny1, false); for(i=0;i<len;i++){ c.texpam(pap, clxy[i][0]+cw*0.5, ny1-10, a.children[i].explain); c.jian(pap, clxy[i][0]+cw*0.5, ny1, clxy[i][0]+cw*0.5, clxy[i][1]-5, true); } } }else{ sjson[a.id] = a; } return [x,y]; }, path:'', gpath:function(sid){ this.path = ''; this.gpaths(json[sid]); }, gpaths:function(a){ this.path+='['+a.id+']'; if(json[a.pid]){ this.gpaths(json[a.pid]); } } }; function startload(){ c.init(); } return { panel:panel, init:function(){ obj0 = getcmp('courseaefwe_'+rand+''); form = rock[index][1]; grid = getcmp('paenlgrid_'+rand+''); tree = getcmp('paenltree_'+rand+''); loadraphael(); } };